/*
 * Copyright 2018 Google
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/firestore/v1beta1/query.proto

#ifndef PROTOBUF_google_2ffirestore_2fv1beta1_2fquery_2eproto__INCLUDED
#define PROTOBUF_google_2ffirestore_2fv1beta1_2fquery_2eproto__INCLUDED

#include <string>

#include <google/protobuf/stubs/common.h>

#if GOOGLE_PROTOBUF_VERSION < 3005000
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers.  Please update
#error your headers.
#endif
#if 3005001 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers.  Please
#error regenerate this file with a newer version of protoc.
#endif

#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/arena.h>
#include <google/protobuf/arenastring.h>
#include <google/protobuf/generated_message_table_driven.h>
#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/metadata.h>
#include <google/protobuf/message.h>
#include <google/protobuf/repeated_field.h>  // IWYU pragma: export
#include <google/protobuf/extension_set.h>  // IWYU pragma: export
#include <google/protobuf/generated_enum_reflection.h>
#include <google/protobuf/unknown_field_set.h>
#include "google/api/annotations.pb.h"
#include "google/firestore/v1beta1/document.pb.h"
#include <google/protobuf/wrappers.pb.h>
// @@protoc_insertion_point(includes)

namespace protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto {
// Internal implementation detail -- do not use these members.
struct TableStruct {
  static const ::google::protobuf::internal::ParseTableField entries[];
  static const ::google::protobuf::internal::AuxillaryParseTableField aux[];
  static const ::google::protobuf::internal::ParseTable schema[10];
  static const ::google::protobuf::internal::FieldMetadata field_metadata[];
  static const ::google::protobuf::internal::SerializationTable serialization_table[];
  static const ::google::protobuf::uint32 offsets[];
};
void AddDescriptors();
void InitDefaultsStructuredQuery_CollectionSelectorImpl();
void InitDefaultsStructuredQuery_CollectionSelector();
void InitDefaultsStructuredQuery_CompositeFilterImpl();
void InitDefaultsStructuredQuery_CompositeFilter();
void InitDefaultsStructuredQuery_FieldFilterImpl();
void InitDefaultsStructuredQuery_FieldFilter();
void InitDefaultsStructuredQuery_UnaryFilterImpl();
void InitDefaultsStructuredQuery_UnaryFilter();
void InitDefaultsStructuredQuery_OrderImpl();
void InitDefaultsStructuredQuery_Order();
void InitDefaultsStructuredQuery_FieldReferenceImpl();
void InitDefaultsStructuredQuery_FieldReference();
void InitDefaultsStructuredQuery_ProjectionImpl();
void InitDefaultsStructuredQuery_Projection();
void InitDefaultsStructuredQueryImpl();
void InitDefaultsStructuredQuery();
void InitDefaultsCursorImpl();
void InitDefaultsCursor();
inline void InitDefaults() {
  InitDefaultsStructuredQuery_CollectionSelector();
  InitDefaultsStructuredQuery_CompositeFilter();
  InitDefaultsStructuredQuery_FieldFilter();
  InitDefaultsStructuredQuery_UnaryFilter();
  InitDefaultsStructuredQuery_Order();
  InitDefaultsStructuredQuery_FieldReference();
  InitDefaultsStructuredQuery_Projection();
  InitDefaultsStructuredQuery();
  InitDefaultsCursor();
}
}  // namespace protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto
namespace google {
namespace firestore {
namespace v1beta1 {
class Cursor;
class CursorDefaultTypeInternal;
extern CursorDefaultTypeInternal _Cursor_default_instance_;
class StructuredQuery;
class StructuredQueryDefaultTypeInternal;
extern StructuredQueryDefaultTypeInternal _StructuredQuery_default_instance_;
class StructuredQuery_CollectionSelector;
class StructuredQuery_CollectionSelectorDefaultTypeInternal;
extern StructuredQuery_CollectionSelectorDefaultTypeInternal _StructuredQuery_CollectionSelector_default_instance_;
class StructuredQuery_CompositeFilter;
class StructuredQuery_CompositeFilterDefaultTypeInternal;
extern StructuredQuery_CompositeFilterDefaultTypeInternal _StructuredQuery_CompositeFilter_default_instance_;
class StructuredQuery_FieldFilter;
class StructuredQuery_FieldFilterDefaultTypeInternal;
extern StructuredQuery_FieldFilterDefaultTypeInternal _StructuredQuery_FieldFilter_default_instance_;
class StructuredQuery_FieldReference;
class StructuredQuery_FieldReferenceDefaultTypeInternal;
extern StructuredQuery_FieldReferenceDefaultTypeInternal _StructuredQuery_FieldReference_default_instance_;
class StructuredQuery_Filter;
class StructuredQuery_FilterDefaultTypeInternal;
extern StructuredQuery_FilterDefaultTypeInternal _StructuredQuery_Filter_default_instance_;
class StructuredQuery_Order;
class StructuredQuery_OrderDefaultTypeInternal;
extern StructuredQuery_OrderDefaultTypeInternal _StructuredQuery_Order_default_instance_;
class StructuredQuery_Projection;
class StructuredQuery_ProjectionDefaultTypeInternal;
extern StructuredQuery_ProjectionDefaultTypeInternal _StructuredQuery_Projection_default_instance_;
class StructuredQuery_UnaryFilter;
class StructuredQuery_UnaryFilterDefaultTypeInternal;
extern StructuredQuery_UnaryFilterDefaultTypeInternal _StructuredQuery_UnaryFilter_default_instance_;
}  // namespace v1beta1
}  // namespace firestore
}  // namespace google
namespace google {
namespace firestore {
namespace v1beta1 {

enum StructuredQuery_CompositeFilter_Operator {
  StructuredQuery_CompositeFilter_Operator_OPERATOR_UNSPECIFIED = 0,
  StructuredQuery_CompositeFilter_Operator_AND = 1,
  StructuredQuery_CompositeFilter_Operator_StructuredQuery_CompositeFilter_Operator_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32min,
  StructuredQuery_CompositeFilter_Operator_StructuredQuery_CompositeFilter_Operator_INT_MAX_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32max
};
bool StructuredQuery_CompositeFilter_Operator_IsValid(int value);
const StructuredQuery_CompositeFilter_Operator StructuredQuery_CompositeFilter_Operator_Operator_MIN = StructuredQuery_CompositeFilter_Operator_OPERATOR_UNSPECIFIED;
const StructuredQuery_CompositeFilter_Operator StructuredQuery_CompositeFilter_Operator_Operator_MAX = StructuredQuery_CompositeFilter_Operator_AND;
const int StructuredQuery_CompositeFilter_Operator_Operator_ARRAYSIZE = StructuredQuery_CompositeFilter_Operator_Operator_MAX + 1;

const ::google::protobuf::EnumDescriptor* StructuredQuery_CompositeFilter_Operator_descriptor();
inline const ::std::string& StructuredQuery_CompositeFilter_Operator_Name(StructuredQuery_CompositeFilter_Operator value) {
  return ::google::protobuf::internal::NameOfEnum(
    StructuredQuery_CompositeFilter_Operator_descriptor(), value);
}
inline bool StructuredQuery_CompositeFilter_Operator_Parse(
    const ::std::string& name, StructuredQuery_CompositeFilter_Operator* value) {
  return ::google::protobuf::internal::ParseNamedEnum<StructuredQuery_CompositeFilter_Operator>(
    StructuredQuery_CompositeFilter_Operator_descriptor(), name, value);
}
enum StructuredQuery_FieldFilter_Operator {
  StructuredQuery_FieldFilter_Operator_OPERATOR_UNSPECIFIED = 0,
  StructuredQuery_FieldFilter_Operator_LESS_THAN = 1,
  StructuredQuery_FieldFilter_Operator_LESS_THAN_OR_EQUAL = 2,
  StructuredQuery_FieldFilter_Operator_GREATER_THAN = 3,
  StructuredQuery_FieldFilter_Operator_GREATER_THAN_OR_EQUAL = 4,
  StructuredQuery_FieldFilter_Operator_EQUAL = 5,
  StructuredQuery_FieldFilter_Operator_ARRAY_CONTAINS = 7,
  StructuredQuery_FieldFilter_Operator_StructuredQuery_FieldFilter_Operator_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32min,
  StructuredQuery_FieldFilter_Operator_StructuredQuery_FieldFilter_Operator_INT_MAX_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32max
};
bool StructuredQuery_FieldFilter_Operator_IsValid(int value);
const StructuredQuery_FieldFilter_Operator StructuredQuery_FieldFilter_Operator_Operator_MIN = StructuredQuery_FieldFilter_Operator_OPERATOR_UNSPECIFIED;
const StructuredQuery_FieldFilter_Operator StructuredQuery_FieldFilter_Operator_Operator_MAX = StructuredQuery_FieldFilter_Operator_ARRAY_CONTAINS;
const int StructuredQuery_FieldFilter_Operator_Operator_ARRAYSIZE = StructuredQuery_FieldFilter_Operator_Operator_MAX + 1;

const ::google::protobuf::EnumDescriptor* StructuredQuery_FieldFilter_Operator_descriptor();
inline const ::std::string& StructuredQuery_FieldFilter_Operator_Name(StructuredQuery_FieldFilter_Operator value) {
  return ::google::protobuf::internal::NameOfEnum(
    StructuredQuery_FieldFilter_Operator_descriptor(), value);
}
inline bool StructuredQuery_FieldFilter_Operator_Parse(
    const ::std::string& name, StructuredQuery_FieldFilter_Operator* value) {
  return ::google::protobuf::internal::ParseNamedEnum<StructuredQuery_FieldFilter_Operator>(
    StructuredQuery_FieldFilter_Operator_descriptor(), name, value);
}
enum StructuredQuery_UnaryFilter_Operator {
  StructuredQuery_UnaryFilter_Operator_OPERATOR_UNSPECIFIED = 0,
  StructuredQuery_UnaryFilter_Operator_IS_NAN = 2,
  StructuredQuery_UnaryFilter_Operator_IS_NULL = 3,
  StructuredQuery_UnaryFilter_Operator_StructuredQuery_UnaryFilter_Operator_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32min,
  StructuredQuery_UnaryFilter_Operator_StructuredQuery_UnaryFilter_Operator_INT_MAX_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32max
};
bool StructuredQuery_UnaryFilter_Operator_IsValid(int value);
const StructuredQuery_UnaryFilter_Operator StructuredQuery_UnaryFilter_Operator_Operator_MIN = StructuredQuery_UnaryFilter_Operator_OPERATOR_UNSPECIFIED;
const StructuredQuery_UnaryFilter_Operator StructuredQuery_UnaryFilter_Operator_Operator_MAX = StructuredQuery_UnaryFilter_Operator_IS_NULL;
const int StructuredQuery_UnaryFilter_Operator_Operator_ARRAYSIZE = StructuredQuery_UnaryFilter_Operator_Operator_MAX + 1;

const ::google::protobuf::EnumDescriptor* StructuredQuery_UnaryFilter_Operator_descriptor();
inline const ::std::string& StructuredQuery_UnaryFilter_Operator_Name(StructuredQuery_UnaryFilter_Operator value) {
  return ::google::protobuf::internal::NameOfEnum(
    StructuredQuery_UnaryFilter_Operator_descriptor(), value);
}
inline bool StructuredQuery_UnaryFilter_Operator_Parse(
    const ::std::string& name, StructuredQuery_UnaryFilter_Operator* value) {
  return ::google::protobuf::internal::ParseNamedEnum<StructuredQuery_UnaryFilter_Operator>(
    StructuredQuery_UnaryFilter_Operator_descriptor(), name, value);
}
enum StructuredQuery_Direction {
  StructuredQuery_Direction_DIRECTION_UNSPECIFIED = 0,
  StructuredQuery_Direction_ASCENDING = 1,
  StructuredQuery_Direction_DESCENDING = 2,
  StructuredQuery_Direction_StructuredQuery_Direction_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32min,
  StructuredQuery_Direction_StructuredQuery_Direction_INT_MAX_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32max
};
bool StructuredQuery_Direction_IsValid(int value);
const StructuredQuery_Direction StructuredQuery_Direction_Direction_MIN = StructuredQuery_Direction_DIRECTION_UNSPECIFIED;
const StructuredQuery_Direction StructuredQuery_Direction_Direction_MAX = StructuredQuery_Direction_DESCENDING;
const int StructuredQuery_Direction_Direction_ARRAYSIZE = StructuredQuery_Direction_Direction_MAX + 1;

const ::google::protobuf::EnumDescriptor* StructuredQuery_Direction_descriptor();
inline const ::std::string& StructuredQuery_Direction_Name(StructuredQuery_Direction value) {
  return ::google::protobuf::internal::NameOfEnum(
    StructuredQuery_Direction_descriptor(), value);
}
inline bool StructuredQuery_Direction_Parse(
    const ::std::string& name, StructuredQuery_Direction* value) {
  return ::google::protobuf::internal::ParseNamedEnum<StructuredQuery_Direction>(
    StructuredQuery_Direction_descriptor(), name, value);
}
// ===================================================================

class StructuredQuery_CollectionSelector : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1beta1.StructuredQuery.CollectionSelector) */ {
 public:
  StructuredQuery_CollectionSelector();
  virtual ~StructuredQuery_CollectionSelector();

  StructuredQuery_CollectionSelector(const StructuredQuery_CollectionSelector& from);

  inline StructuredQuery_CollectionSelector& operator=(const StructuredQuery_CollectionSelector& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  StructuredQuery_CollectionSelector(StructuredQuery_CollectionSelector&& from) noexcept
    : StructuredQuery_CollectionSelector() {
    *this = ::std::move(from);
  }

  inline StructuredQuery_CollectionSelector& operator=(StructuredQuery_CollectionSelector&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  static const ::google::protobuf::Descriptor* descriptor();
  static const StructuredQuery_CollectionSelector& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const StructuredQuery_CollectionSelector* internal_default_instance() {
    return reinterpret_cast<const StructuredQuery_CollectionSelector*>(
               &_StructuredQuery_CollectionSelector_default_instance_);
  }
  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
    0;

  void Swap(StructuredQuery_CollectionSelector* other);
  friend void swap(StructuredQuery_CollectionSelector& a, StructuredQuery_CollectionSelector& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline StructuredQuery_CollectionSelector* New() const PROTOBUF_FINAL { return New(NULL); }

  StructuredQuery_CollectionSelector* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void CopyFrom(const StructuredQuery_CollectionSelector& from);
  void MergeFrom(const StructuredQuery_CollectionSelector& from);
  void Clear() PROTOBUF_FINAL;
  bool IsInitialized() const PROTOBUF_FINAL;

  size_t ByteSizeLong() const PROTOBUF_FINAL;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const PROTOBUF_FINAL;
  void InternalSwap(StructuredQuery_CollectionSelector* other);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return NULL;
  }
  inline void* MaybeArenaPtr() const {
    return NULL;
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // string collection_id = 2;
  void clear_collection_id();
  static const int kCollectionIdFieldNumber = 2;
  const ::std::string& collection_id() const;
  void set_collection_id(const ::std::string& value);
  #if LANG_CXX11
  void set_collection_id(::std::string&& value);
  #endif
  void set_collection_id(const char* value);
  void set_collection_id(const char* value, size_t size);
  ::std::string* mutable_collection_id();
  ::std::string* release_collection_id();
  void set_allocated_collection_id(::std::string* collection_id);

  // bool all_descendants = 3;
  void clear_all_descendants();
  static const int kAllDescendantsFieldNumber = 3;
  bool all_descendants() const;
  void set_all_descendants(bool value);

  // @@protoc_insertion_point(class_scope:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::ArenaStringPtr collection_id_;
  bool all_descendants_;
  mutable int _cached_size_;
  friend struct ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::TableStruct;
  friend void ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_CollectionSelectorImpl();
};
// -------------------------------------------------------------------

class StructuredQuery_Filter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1beta1.StructuredQuery.Filter) */ {
 public:
  StructuredQuery_Filter();
  virtual ~StructuredQuery_Filter();

  StructuredQuery_Filter(const StructuredQuery_Filter& from);

  inline StructuredQuery_Filter& operator=(const StructuredQuery_Filter& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  StructuredQuery_Filter(StructuredQuery_Filter&& from) noexcept
    : StructuredQuery_Filter() {
    *this = ::std::move(from);
  }

  inline StructuredQuery_Filter& operator=(StructuredQuery_Filter&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  static const ::google::protobuf::Descriptor* descriptor();
  static const StructuredQuery_Filter& default_instance();

  enum FilterTypeCase {
    kCompositeFilter = 1,
    kFieldFilter = 2,
    kUnaryFilter = 3,
    FILTER_TYPE_NOT_SET = 0,
  };

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const StructuredQuery_Filter* internal_default_instance() {
    return reinterpret_cast<const StructuredQuery_Filter*>(
               &_StructuredQuery_Filter_default_instance_);
  }
  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
    1;

  void Swap(StructuredQuery_Filter* other);
  friend void swap(StructuredQuery_Filter& a, StructuredQuery_Filter& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline StructuredQuery_Filter* New() const PROTOBUF_FINAL { return New(NULL); }

  StructuredQuery_Filter* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void CopyFrom(const StructuredQuery_Filter& from);
  void MergeFrom(const StructuredQuery_Filter& from);
  void Clear() PROTOBUF_FINAL;
  bool IsInitialized() const PROTOBUF_FINAL;

  size_t ByteSizeLong() const PROTOBUF_FINAL;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const PROTOBUF_FINAL;
  void InternalSwap(StructuredQuery_Filter* other);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return NULL;
  }
  inline void* MaybeArenaPtr() const {
    return NULL;
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // .google.firestore.v1beta1.StructuredQuery.CompositeFilter composite_filter = 1;
  bool has_composite_filter() const;
  void clear_composite_filter();
  static const int kCompositeFilterFieldNumber = 1;
  const ::google::firestore::v1beta1::StructuredQuery_CompositeFilter& composite_filter() const;
  ::google::firestore::v1beta1::StructuredQuery_CompositeFilter* release_composite_filter();
  ::google::firestore::v1beta1::StructuredQuery_CompositeFilter* mutable_composite_filter();
  void set_allocated_composite_filter(::google::firestore::v1beta1::StructuredQuery_CompositeFilter* composite_filter);

  // .google.firestore.v1beta1.StructuredQuery.FieldFilter field_filter = 2;
  bool has_field_filter() const;
  void clear_field_filter();
  static const int kFieldFilterFieldNumber = 2;
  const ::google::firestore::v1beta1::StructuredQuery_FieldFilter& field_filter() const;
  ::google::firestore::v1beta1::StructuredQuery_FieldFilter* release_field_filter();
  ::google::firestore::v1beta1::StructuredQuery_FieldFilter* mutable_field_filter();
  void set_allocated_field_filter(::google::firestore::v1beta1::StructuredQuery_FieldFilter* field_filter);

  // .google.firestore.v1beta1.StructuredQuery.UnaryFilter unary_filter = 3;
  bool has_unary_filter() const;
  void clear_unary_filter();
  static const int kUnaryFilterFieldNumber = 3;
  const ::google::firestore::v1beta1::StructuredQuery_UnaryFilter& unary_filter() const;
  ::google::firestore::v1beta1::StructuredQuery_UnaryFilter* release_unary_filter();
  ::google::firestore::v1beta1::StructuredQuery_UnaryFilter* mutable_unary_filter();
  void set_allocated_unary_filter(::google::firestore::v1beta1::StructuredQuery_UnaryFilter* unary_filter);

  FilterTypeCase filter_type_case() const;
  // @@protoc_insertion_point(class_scope:google.firestore.v1beta1.StructuredQuery.Filter)
 private:
  void set_has_composite_filter();
  void set_has_field_filter();
  void set_has_unary_filter();

  inline bool has_filter_type() const;
  void clear_filter_type();
  inline void clear_has_filter_type();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  union FilterTypeUnion {
    FilterTypeUnion() {}
    ::google::firestore::v1beta1::StructuredQuery_CompositeFilter* composite_filter_;
    ::google::firestore::v1beta1::StructuredQuery_FieldFilter* field_filter_;
    ::google::firestore::v1beta1::StructuredQuery_UnaryFilter* unary_filter_;
  } filter_type_;
  mutable int _cached_size_;
  ::google::protobuf::uint32 _oneof_case_[1];

  friend struct ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::TableStruct;
  friend void ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_CompositeFilterImpl();
};
// -------------------------------------------------------------------

class StructuredQuery_CompositeFilter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1beta1.StructuredQuery.CompositeFilter) */ {
 public:
  StructuredQuery_CompositeFilter();
  virtual ~StructuredQuery_CompositeFilter();

  StructuredQuery_CompositeFilter(const StructuredQuery_CompositeFilter& from);

  inline StructuredQuery_CompositeFilter& operator=(const StructuredQuery_CompositeFilter& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  StructuredQuery_CompositeFilter(StructuredQuery_CompositeFilter&& from) noexcept
    : StructuredQuery_CompositeFilter() {
    *this = ::std::move(from);
  }

  inline StructuredQuery_CompositeFilter& operator=(StructuredQuery_CompositeFilter&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  static const ::google::protobuf::Descriptor* descriptor();
  static const StructuredQuery_CompositeFilter& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const StructuredQuery_CompositeFilter* internal_default_instance() {
    return reinterpret_cast<const StructuredQuery_CompositeFilter*>(
               &_StructuredQuery_CompositeFilter_default_instance_);
  }
  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
    2;

  void Swap(StructuredQuery_CompositeFilter* other);
  friend void swap(StructuredQuery_CompositeFilter& a, StructuredQuery_CompositeFilter& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline StructuredQuery_CompositeFilter* New() const PROTOBUF_FINAL { return New(NULL); }

  StructuredQuery_CompositeFilter* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void CopyFrom(const StructuredQuery_CompositeFilter& from);
  void MergeFrom(const StructuredQuery_CompositeFilter& from);
  void Clear() PROTOBUF_FINAL;
  bool IsInitialized() const PROTOBUF_FINAL;

  size_t ByteSizeLong() const PROTOBUF_FINAL;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const PROTOBUF_FINAL;
  void InternalSwap(StructuredQuery_CompositeFilter* other);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return NULL;
  }
  inline void* MaybeArenaPtr() const {
    return NULL;
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;

  // nested types ----------------------------------------------------

  typedef StructuredQuery_CompositeFilter_Operator Operator;
  static const Operator OPERATOR_UNSPECIFIED =
    StructuredQuery_CompositeFilter_Operator_OPERATOR_UNSPECIFIED;
  static const Operator AND =
    StructuredQuery_CompositeFilter_Operator_AND;
  static inline bool Operator_IsValid(int value) {
    return StructuredQuery_CompositeFilter_Operator_IsValid(value);
  }
  static const Operator Operator_MIN =
    StructuredQuery_CompositeFilter_Operator_Operator_MIN;
  static const Operator Operator_MAX =
    StructuredQuery_CompositeFilter_Operator_Operator_MAX;
  static const int Operator_ARRAYSIZE =
    StructuredQuery_CompositeFilter_Operator_Operator_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  Operator_descriptor() {
    return StructuredQuery_CompositeFilter_Operator_descriptor();
  }
  static inline const ::std::string& Operator_Name(Operator value) {
    return StructuredQuery_CompositeFilter_Operator_Name(value);
  }
  static inline bool Operator_Parse(const ::std::string& name,
      Operator* value) {
    return StructuredQuery_CompositeFilter_Operator_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // repeated .google.firestore.v1beta1.StructuredQuery.Filter filters = 2;
  int filters_size() const;
  void clear_filters();
  static const int kFiltersFieldNumber = 2;
  const ::google::firestore::v1beta1::StructuredQuery_Filter& filters(int index) const;
  ::google::firestore::v1beta1::StructuredQuery_Filter* mutable_filters(int index);
  ::google::firestore::v1beta1::StructuredQuery_Filter* add_filters();
  ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_Filter >*
      mutable_filters();
  const ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_Filter >&
      filters() const;

  // .google.firestore.v1beta1.StructuredQuery.CompositeFilter.Operator op = 1;
  void clear_op();
  static const int kOpFieldNumber = 1;
  ::google::firestore::v1beta1::StructuredQuery_CompositeFilter_Operator op() const;
  void set_op(::google::firestore::v1beta1::StructuredQuery_CompositeFilter_Operator value);

  // @@protoc_insertion_point(class_scope:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_Filter > filters_;
  int op_;
  mutable int _cached_size_;
  friend struct ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::TableStruct;
  friend void ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_CompositeFilterImpl();
};
// -------------------------------------------------------------------

class StructuredQuery_FieldFilter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1beta1.StructuredQuery.FieldFilter) */ {
 public:
  StructuredQuery_FieldFilter();
  virtual ~StructuredQuery_FieldFilter();

  StructuredQuery_FieldFilter(const StructuredQuery_FieldFilter& from);

  inline StructuredQuery_FieldFilter& operator=(const StructuredQuery_FieldFilter& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  StructuredQuery_FieldFilter(StructuredQuery_FieldFilter&& from) noexcept
    : StructuredQuery_FieldFilter() {
    *this = ::std::move(from);
  }

  inline StructuredQuery_FieldFilter& operator=(StructuredQuery_FieldFilter&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  static const ::google::protobuf::Descriptor* descriptor();
  static const StructuredQuery_FieldFilter& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const StructuredQuery_FieldFilter* internal_default_instance() {
    return reinterpret_cast<const StructuredQuery_FieldFilter*>(
               &_StructuredQuery_FieldFilter_default_instance_);
  }
  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
    3;

  void Swap(StructuredQuery_FieldFilter* other);
  friend void swap(StructuredQuery_FieldFilter& a, StructuredQuery_FieldFilter& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline StructuredQuery_FieldFilter* New() const PROTOBUF_FINAL { return New(NULL); }

  StructuredQuery_FieldFilter* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void CopyFrom(const StructuredQuery_FieldFilter& from);
  void MergeFrom(const StructuredQuery_FieldFilter& from);
  void Clear() PROTOBUF_FINAL;
  bool IsInitialized() const PROTOBUF_FINAL;

  size_t ByteSizeLong() const PROTOBUF_FINAL;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const PROTOBUF_FINAL;
  void InternalSwap(StructuredQuery_FieldFilter* other);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return NULL;
  }
  inline void* MaybeArenaPtr() const {
    return NULL;
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;

  // nested types ----------------------------------------------------

  typedef StructuredQuery_FieldFilter_Operator Operator;
  static const Operator OPERATOR_UNSPECIFIED =
    StructuredQuery_FieldFilter_Operator_OPERATOR_UNSPECIFIED;
  static const Operator LESS_THAN =
    StructuredQuery_FieldFilter_Operator_LESS_THAN;
  static const Operator LESS_THAN_OR_EQUAL =
    StructuredQuery_FieldFilter_Operator_LESS_THAN_OR_EQUAL;
  static const Operator GREATER_THAN =
    StructuredQuery_FieldFilter_Operator_GREATER_THAN;
  static const Operator GREATER_THAN_OR_EQUAL =
    StructuredQuery_FieldFilter_Operator_GREATER_THAN_OR_EQUAL;
  static const Operator EQUAL =
    StructuredQuery_FieldFilter_Operator_EQUAL;
  static const Operator ARRAY_CONTAINS =
    StructuredQuery_FieldFilter_Operator_ARRAY_CONTAINS;
  static inline bool Operator_IsValid(int value) {
    return StructuredQuery_FieldFilter_Operator_IsValid(value);
  }
  static const Operator Operator_MIN =
    StructuredQuery_FieldFilter_Operator_Operator_MIN;
  static const Operator Operator_MAX =
    StructuredQuery_FieldFilter_Operator_Operator_MAX;
  static const int Operator_ARRAYSIZE =
    StructuredQuery_FieldFilter_Operator_Operator_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  Operator_descriptor() {
    return StructuredQuery_FieldFilter_Operator_descriptor();
  }
  static inline const ::std::string& Operator_Name(Operator value) {
    return StructuredQuery_FieldFilter_Operator_Name(value);
  }
  static inline bool Operator_Parse(const ::std::string& name,
      Operator* value) {
    return StructuredQuery_FieldFilter_Operator_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 1;
  bool has_field() const;
  void clear_field();
  static const int kFieldFieldNumber = 1;
  const ::google::firestore::v1beta1::StructuredQuery_FieldReference& field() const;
  ::google::firestore::v1beta1::StructuredQuery_FieldReference* release_field();
  ::google::firestore::v1beta1::StructuredQuery_FieldReference* mutable_field();
  void set_allocated_field(::google::firestore::v1beta1::StructuredQuery_FieldReference* field);

  // .google.firestore.v1beta1.Value value = 3;
  bool has_value() const;
  void clear_value();
  static const int kValueFieldNumber = 3;
  const ::google::firestore::v1beta1::Value& value() const;
  ::google::firestore::v1beta1::Value* release_value();
  ::google::firestore::v1beta1::Value* mutable_value();
  void set_allocated_value(::google::firestore::v1beta1::Value* value);

  // .google.firestore.v1beta1.StructuredQuery.FieldFilter.Operator op = 2;
  void clear_op();
  static const int kOpFieldNumber = 2;
  ::google::firestore::v1beta1::StructuredQuery_FieldFilter_Operator op() const;
  void set_op(::google::firestore::v1beta1::StructuredQuery_FieldFilter_Operator value);

  // @@protoc_insertion_point(class_scope:google.firestore.v1beta1.StructuredQuery.FieldFilter)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::firestore::v1beta1::StructuredQuery_FieldReference* field_;
  ::google::firestore::v1beta1::Value* value_;
  int op_;
  mutable int _cached_size_;
  friend struct ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::TableStruct;
  friend void ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_FieldFilterImpl();
};
// -------------------------------------------------------------------

class StructuredQuery_UnaryFilter : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1beta1.StructuredQuery.UnaryFilter) */ {
 public:
  StructuredQuery_UnaryFilter();
  virtual ~StructuredQuery_UnaryFilter();

  StructuredQuery_UnaryFilter(const StructuredQuery_UnaryFilter& from);

  inline StructuredQuery_UnaryFilter& operator=(const StructuredQuery_UnaryFilter& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  StructuredQuery_UnaryFilter(StructuredQuery_UnaryFilter&& from) noexcept
    : StructuredQuery_UnaryFilter() {
    *this = ::std::move(from);
  }

  inline StructuredQuery_UnaryFilter& operator=(StructuredQuery_UnaryFilter&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  static const ::google::protobuf::Descriptor* descriptor();
  static const StructuredQuery_UnaryFilter& default_instance();

  enum OperandTypeCase {
    kField = 2,
    OPERAND_TYPE_NOT_SET = 0,
  };

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const StructuredQuery_UnaryFilter* internal_default_instance() {
    return reinterpret_cast<const StructuredQuery_UnaryFilter*>(
               &_StructuredQuery_UnaryFilter_default_instance_);
  }
  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
    4;

  void Swap(StructuredQuery_UnaryFilter* other);
  friend void swap(StructuredQuery_UnaryFilter& a, StructuredQuery_UnaryFilter& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline StructuredQuery_UnaryFilter* New() const PROTOBUF_FINAL { return New(NULL); }

  StructuredQuery_UnaryFilter* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void CopyFrom(const StructuredQuery_UnaryFilter& from);
  void MergeFrom(const StructuredQuery_UnaryFilter& from);
  void Clear() PROTOBUF_FINAL;
  bool IsInitialized() const PROTOBUF_FINAL;

  size_t ByteSizeLong() const PROTOBUF_FINAL;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const PROTOBUF_FINAL;
  void InternalSwap(StructuredQuery_UnaryFilter* other);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return NULL;
  }
  inline void* MaybeArenaPtr() const {
    return NULL;
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;

  // nested types ----------------------------------------------------

  typedef StructuredQuery_UnaryFilter_Operator Operator;
  static const Operator OPERATOR_UNSPECIFIED =
    StructuredQuery_UnaryFilter_Operator_OPERATOR_UNSPECIFIED;
  static const Operator IS_NAN =
    StructuredQuery_UnaryFilter_Operator_IS_NAN;
  static const Operator IS_NULL =
    StructuredQuery_UnaryFilter_Operator_IS_NULL;
  static inline bool Operator_IsValid(int value) {
    return StructuredQuery_UnaryFilter_Operator_IsValid(value);
  }
  static const Operator Operator_MIN =
    StructuredQuery_UnaryFilter_Operator_Operator_MIN;
  static const Operator Operator_MAX =
    StructuredQuery_UnaryFilter_Operator_Operator_MAX;
  static const int Operator_ARRAYSIZE =
    StructuredQuery_UnaryFilter_Operator_Operator_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  Operator_descriptor() {
    return StructuredQuery_UnaryFilter_Operator_descriptor();
  }
  static inline const ::std::string& Operator_Name(Operator value) {
    return StructuredQuery_UnaryFilter_Operator_Name(value);
  }
  static inline bool Operator_Parse(const ::std::string& name,
      Operator* value) {
    return StructuredQuery_UnaryFilter_Operator_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // .google.firestore.v1beta1.StructuredQuery.UnaryFilter.Operator op = 1;
  void clear_op();
  static const int kOpFieldNumber = 1;
  ::google::firestore::v1beta1::StructuredQuery_UnaryFilter_Operator op() const;
  void set_op(::google::firestore::v1beta1::StructuredQuery_UnaryFilter_Operator value);

  // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 2;
  bool has_field() const;
  void clear_field();
  static const int kFieldFieldNumber = 2;
  const ::google::firestore::v1beta1::StructuredQuery_FieldReference& field() const;
  ::google::firestore::v1beta1::StructuredQuery_FieldReference* release_field();
  ::google::firestore::v1beta1::StructuredQuery_FieldReference* mutable_field();
  void set_allocated_field(::google::firestore::v1beta1::StructuredQuery_FieldReference* field);

  OperandTypeCase operand_type_case() const;
  // @@protoc_insertion_point(class_scope:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
 private:
  void set_has_field();

  inline bool has_operand_type() const;
  void clear_operand_type();
  inline void clear_has_operand_type();

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  int op_;
  union OperandTypeUnion {
    OperandTypeUnion() {}
    ::google::firestore::v1beta1::StructuredQuery_FieldReference* field_;
  } operand_type_;
  mutable int _cached_size_;
  ::google::protobuf::uint32 _oneof_case_[1];

  friend struct ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::TableStruct;
  friend void ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_UnaryFilterImpl();
};
// -------------------------------------------------------------------

class StructuredQuery_Order : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1beta1.StructuredQuery.Order) */ {
 public:
  StructuredQuery_Order();
  virtual ~StructuredQuery_Order();

  StructuredQuery_Order(const StructuredQuery_Order& from);

  inline StructuredQuery_Order& operator=(const StructuredQuery_Order& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  StructuredQuery_Order(StructuredQuery_Order&& from) noexcept
    : StructuredQuery_Order() {
    *this = ::std::move(from);
  }

  inline StructuredQuery_Order& operator=(StructuredQuery_Order&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  static const ::google::protobuf::Descriptor* descriptor();
  static const StructuredQuery_Order& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const StructuredQuery_Order* internal_default_instance() {
    return reinterpret_cast<const StructuredQuery_Order*>(
               &_StructuredQuery_Order_default_instance_);
  }
  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
    5;

  void Swap(StructuredQuery_Order* other);
  friend void swap(StructuredQuery_Order& a, StructuredQuery_Order& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline StructuredQuery_Order* New() const PROTOBUF_FINAL { return New(NULL); }

  StructuredQuery_Order* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void CopyFrom(const StructuredQuery_Order& from);
  void MergeFrom(const StructuredQuery_Order& from);
  void Clear() PROTOBUF_FINAL;
  bool IsInitialized() const PROTOBUF_FINAL;

  size_t ByteSizeLong() const PROTOBUF_FINAL;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const PROTOBUF_FINAL;
  void InternalSwap(StructuredQuery_Order* other);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return NULL;
  }
  inline void* MaybeArenaPtr() const {
    return NULL;
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 1;
  bool has_field() const;
  void clear_field();
  static const int kFieldFieldNumber = 1;
  const ::google::firestore::v1beta1::StructuredQuery_FieldReference& field() const;
  ::google::firestore::v1beta1::StructuredQuery_FieldReference* release_field();
  ::google::firestore::v1beta1::StructuredQuery_FieldReference* mutable_field();
  void set_allocated_field(::google::firestore::v1beta1::StructuredQuery_FieldReference* field);

  // .google.firestore.v1beta1.StructuredQuery.Direction direction = 2;
  void clear_direction();
  static const int kDirectionFieldNumber = 2;
  ::google::firestore::v1beta1::StructuredQuery_Direction direction() const;
  void set_direction(::google::firestore::v1beta1::StructuredQuery_Direction value);

  // @@protoc_insertion_point(class_scope:google.firestore.v1beta1.StructuredQuery.Order)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::firestore::v1beta1::StructuredQuery_FieldReference* field_;
  int direction_;
  mutable int _cached_size_;
  friend struct ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::TableStruct;
  friend void ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_OrderImpl();
};
// -------------------------------------------------------------------

class StructuredQuery_FieldReference : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1beta1.StructuredQuery.FieldReference) */ {
 public:
  StructuredQuery_FieldReference();
  virtual ~StructuredQuery_FieldReference();

  StructuredQuery_FieldReference(const StructuredQuery_FieldReference& from);

  inline StructuredQuery_FieldReference& operator=(const StructuredQuery_FieldReference& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  StructuredQuery_FieldReference(StructuredQuery_FieldReference&& from) noexcept
    : StructuredQuery_FieldReference() {
    *this = ::std::move(from);
  }

  inline StructuredQuery_FieldReference& operator=(StructuredQuery_FieldReference&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  static const ::google::protobuf::Descriptor* descriptor();
  static const StructuredQuery_FieldReference& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const StructuredQuery_FieldReference* internal_default_instance() {
    return reinterpret_cast<const StructuredQuery_FieldReference*>(
               &_StructuredQuery_FieldReference_default_instance_);
  }
  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
    6;

  void Swap(StructuredQuery_FieldReference* other);
  friend void swap(StructuredQuery_FieldReference& a, StructuredQuery_FieldReference& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline StructuredQuery_FieldReference* New() const PROTOBUF_FINAL { return New(NULL); }

  StructuredQuery_FieldReference* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void CopyFrom(const StructuredQuery_FieldReference& from);
  void MergeFrom(const StructuredQuery_FieldReference& from);
  void Clear() PROTOBUF_FINAL;
  bool IsInitialized() const PROTOBUF_FINAL;

  size_t ByteSizeLong() const PROTOBUF_FINAL;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const PROTOBUF_FINAL;
  void InternalSwap(StructuredQuery_FieldReference* other);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return NULL;
  }
  inline void* MaybeArenaPtr() const {
    return NULL;
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // string field_path = 2;
  void clear_field_path();
  static const int kFieldPathFieldNumber = 2;
  const ::std::string& field_path() const;
  void set_field_path(const ::std::string& value);
  #if LANG_CXX11
  void set_field_path(::std::string&& value);
  #endif
  void set_field_path(const char* value);
  void set_field_path(const char* value, size_t size);
  ::std::string* mutable_field_path();
  ::std::string* release_field_path();
  void set_allocated_field_path(::std::string* field_path);

  // @@protoc_insertion_point(class_scope:google.firestore.v1beta1.StructuredQuery.FieldReference)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::internal::ArenaStringPtr field_path_;
  mutable int _cached_size_;
  friend struct ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::TableStruct;
  friend void ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_FieldReferenceImpl();
};
// -------------------------------------------------------------------

class StructuredQuery_Projection : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1beta1.StructuredQuery.Projection) */ {
 public:
  StructuredQuery_Projection();
  virtual ~StructuredQuery_Projection();

  StructuredQuery_Projection(const StructuredQuery_Projection& from);

  inline StructuredQuery_Projection& operator=(const StructuredQuery_Projection& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  StructuredQuery_Projection(StructuredQuery_Projection&& from) noexcept
    : StructuredQuery_Projection() {
    *this = ::std::move(from);
  }

  inline StructuredQuery_Projection& operator=(StructuredQuery_Projection&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  static const ::google::protobuf::Descriptor* descriptor();
  static const StructuredQuery_Projection& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const StructuredQuery_Projection* internal_default_instance() {
    return reinterpret_cast<const StructuredQuery_Projection*>(
               &_StructuredQuery_Projection_default_instance_);
  }
  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
    7;

  void Swap(StructuredQuery_Projection* other);
  friend void swap(StructuredQuery_Projection& a, StructuredQuery_Projection& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline StructuredQuery_Projection* New() const PROTOBUF_FINAL { return New(NULL); }

  StructuredQuery_Projection* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void CopyFrom(const StructuredQuery_Projection& from);
  void MergeFrom(const StructuredQuery_Projection& from);
  void Clear() PROTOBUF_FINAL;
  bool IsInitialized() const PROTOBUF_FINAL;

  size_t ByteSizeLong() const PROTOBUF_FINAL;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const PROTOBUF_FINAL;
  void InternalSwap(StructuredQuery_Projection* other);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return NULL;
  }
  inline void* MaybeArenaPtr() const {
    return NULL;
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // repeated .google.firestore.v1beta1.StructuredQuery.FieldReference fields = 2;
  int fields_size() const;
  void clear_fields();
  static const int kFieldsFieldNumber = 2;
  const ::google::firestore::v1beta1::StructuredQuery_FieldReference& fields(int index) const;
  ::google::firestore::v1beta1::StructuredQuery_FieldReference* mutable_fields(int index);
  ::google::firestore::v1beta1::StructuredQuery_FieldReference* add_fields();
  ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_FieldReference >*
      mutable_fields();
  const ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_FieldReference >&
      fields() const;

  // @@protoc_insertion_point(class_scope:google.firestore.v1beta1.StructuredQuery.Projection)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_FieldReference > fields_;
  mutable int _cached_size_;
  friend struct ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::TableStruct;
  friend void ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_ProjectionImpl();
};
// -------------------------------------------------------------------

class StructuredQuery : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1beta1.StructuredQuery) */ {
 public:
  StructuredQuery();
  virtual ~StructuredQuery();

  StructuredQuery(const StructuredQuery& from);

  inline StructuredQuery& operator=(const StructuredQuery& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  StructuredQuery(StructuredQuery&& from) noexcept
    : StructuredQuery() {
    *this = ::std::move(from);
  }

  inline StructuredQuery& operator=(StructuredQuery&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  static const ::google::protobuf::Descriptor* descriptor();
  static const StructuredQuery& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const StructuredQuery* internal_default_instance() {
    return reinterpret_cast<const StructuredQuery*>(
               &_StructuredQuery_default_instance_);
  }
  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
    8;

  void Swap(StructuredQuery* other);
  friend void swap(StructuredQuery& a, StructuredQuery& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline StructuredQuery* New() const PROTOBUF_FINAL { return New(NULL); }

  StructuredQuery* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void CopyFrom(const StructuredQuery& from);
  void MergeFrom(const StructuredQuery& from);
  void Clear() PROTOBUF_FINAL;
  bool IsInitialized() const PROTOBUF_FINAL;

  size_t ByteSizeLong() const PROTOBUF_FINAL;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const PROTOBUF_FINAL;
  void InternalSwap(StructuredQuery* other);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return NULL;
  }
  inline void* MaybeArenaPtr() const {
    return NULL;
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;

  // nested types ----------------------------------------------------

  typedef StructuredQuery_CollectionSelector CollectionSelector;
  typedef StructuredQuery_Filter Filter;
  typedef StructuredQuery_CompositeFilter CompositeFilter;
  typedef StructuredQuery_FieldFilter FieldFilter;
  typedef StructuredQuery_UnaryFilter UnaryFilter;
  typedef StructuredQuery_Order Order;
  typedef StructuredQuery_FieldReference FieldReference;
  typedef StructuredQuery_Projection Projection;

  typedef StructuredQuery_Direction Direction;
  static const Direction DIRECTION_UNSPECIFIED =
    StructuredQuery_Direction_DIRECTION_UNSPECIFIED;
  static const Direction ASCENDING =
    StructuredQuery_Direction_ASCENDING;
  static const Direction DESCENDING =
    StructuredQuery_Direction_DESCENDING;
  static inline bool Direction_IsValid(int value) {
    return StructuredQuery_Direction_IsValid(value);
  }
  static const Direction Direction_MIN =
    StructuredQuery_Direction_Direction_MIN;
  static const Direction Direction_MAX =
    StructuredQuery_Direction_Direction_MAX;
  static const int Direction_ARRAYSIZE =
    StructuredQuery_Direction_Direction_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  Direction_descriptor() {
    return StructuredQuery_Direction_descriptor();
  }
  static inline const ::std::string& Direction_Name(Direction value) {
    return StructuredQuery_Direction_Name(value);
  }
  static inline bool Direction_Parse(const ::std::string& name,
      Direction* value) {
    return StructuredQuery_Direction_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // repeated .google.firestore.v1beta1.StructuredQuery.CollectionSelector from = 2;
  int from_size() const;
  void clear_from();
  static const int kFromFieldNumber = 2;
  const ::google::firestore::v1beta1::StructuredQuery_CollectionSelector& from(int index) const;
  ::google::firestore::v1beta1::StructuredQuery_CollectionSelector* mutable_from(int index);
  ::google::firestore::v1beta1::StructuredQuery_CollectionSelector* add_from();
  ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_CollectionSelector >*
      mutable_from();
  const ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_CollectionSelector >&
      from() const;

  // repeated .google.firestore.v1beta1.StructuredQuery.Order order_by = 4;
  int order_by_size() const;
  void clear_order_by();
  static const int kOrderByFieldNumber = 4;
  const ::google::firestore::v1beta1::StructuredQuery_Order& order_by(int index) const;
  ::google::firestore::v1beta1::StructuredQuery_Order* mutable_order_by(int index);
  ::google::firestore::v1beta1::StructuredQuery_Order* add_order_by();
  ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_Order >*
      mutable_order_by();
  const ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_Order >&
      order_by() const;

  // .google.firestore.v1beta1.StructuredQuery.Projection select = 1;
  bool has_select() const;
  void clear_select();
  static const int kSelectFieldNumber = 1;
  const ::google::firestore::v1beta1::StructuredQuery_Projection& select() const;
  ::google::firestore::v1beta1::StructuredQuery_Projection* release_select();
  ::google::firestore::v1beta1::StructuredQuery_Projection* mutable_select();
  void set_allocated_select(::google::firestore::v1beta1::StructuredQuery_Projection* select);

  // .google.firestore.v1beta1.StructuredQuery.Filter where = 3;
  bool has_where() const;
  void clear_where();
  static const int kWhereFieldNumber = 3;
  const ::google::firestore::v1beta1::StructuredQuery_Filter& where() const;
  ::google::firestore::v1beta1::StructuredQuery_Filter* release_where();
  ::google::firestore::v1beta1::StructuredQuery_Filter* mutable_where();
  void set_allocated_where(::google::firestore::v1beta1::StructuredQuery_Filter* where);

  // .google.protobuf.Int32Value limit = 5;
  bool has_limit() const;
  void clear_limit();
  static const int kLimitFieldNumber = 5;
  const ::google::protobuf::Int32Value& limit() const;
  ::google::protobuf::Int32Value* release_limit();
  ::google::protobuf::Int32Value* mutable_limit();
  void set_allocated_limit(::google::protobuf::Int32Value* limit);

  // .google.firestore.v1beta1.Cursor start_at = 7;
  bool has_start_at() const;
  void clear_start_at();
  static const int kStartAtFieldNumber = 7;
  const ::google::firestore::v1beta1::Cursor& start_at() const;
  ::google::firestore::v1beta1::Cursor* release_start_at();
  ::google::firestore::v1beta1::Cursor* mutable_start_at();
  void set_allocated_start_at(::google::firestore::v1beta1::Cursor* start_at);

  // .google.firestore.v1beta1.Cursor end_at = 8;
  bool has_end_at() const;
  void clear_end_at();
  static const int kEndAtFieldNumber = 8;
  const ::google::firestore::v1beta1::Cursor& end_at() const;
  ::google::firestore::v1beta1::Cursor* release_end_at();
  ::google::firestore::v1beta1::Cursor* mutable_end_at();
  void set_allocated_end_at(::google::firestore::v1beta1::Cursor* end_at);

  // int32 offset = 6;
  void clear_offset();
  static const int kOffsetFieldNumber = 6;
  ::google::protobuf::int32 offset() const;
  void set_offset(::google::protobuf::int32 value);

  // @@protoc_insertion_point(class_scope:google.firestore.v1beta1.StructuredQuery)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_CollectionSelector > from_;
  ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_Order > order_by_;
  ::google::firestore::v1beta1::StructuredQuery_Projection* select_;
  ::google::firestore::v1beta1::StructuredQuery_Filter* where_;
  ::google::protobuf::Int32Value* limit_;
  ::google::firestore::v1beta1::Cursor* start_at_;
  ::google::firestore::v1beta1::Cursor* end_at_;
  ::google::protobuf::int32 offset_;
  mutable int _cached_size_;
  friend struct ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::TableStruct;
  friend void ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQueryImpl();
};
// -------------------------------------------------------------------

class Cursor : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1beta1.Cursor) */ {
 public:
  Cursor();
  virtual ~Cursor();

  Cursor(const Cursor& from);

  inline Cursor& operator=(const Cursor& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  Cursor(Cursor&& from) noexcept
    : Cursor() {
    *this = ::std::move(from);
  }

  inline Cursor& operator=(Cursor&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  static const ::google::protobuf::Descriptor* descriptor();
  static const Cursor& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const Cursor* internal_default_instance() {
    return reinterpret_cast<const Cursor*>(
               &_Cursor_default_instance_);
  }
  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
    9;

  void Swap(Cursor* other);
  friend void swap(Cursor& a, Cursor& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline Cursor* New() const PROTOBUF_FINAL { return New(NULL); }

  Cursor* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
  void CopyFrom(const Cursor& from);
  void MergeFrom(const Cursor& from);
  void Clear() PROTOBUF_FINAL;
  bool IsInitialized() const PROTOBUF_FINAL;

  size_t ByteSizeLong() const PROTOBUF_FINAL;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const PROTOBUF_FINAL;
  void InternalSwap(Cursor* other);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return NULL;
  }
  inline void* MaybeArenaPtr() const {
    return NULL;
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // repeated .google.firestore.v1beta1.Value values = 1;
  int values_size() const;
  void clear_values();
  static const int kValuesFieldNumber = 1;
  const ::google::firestore::v1beta1::Value& values(int index) const;
  ::google::firestore::v1beta1::Value* mutable_values(int index);
  ::google::firestore::v1beta1::Value* add_values();
  ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::Value >*
      mutable_values();
  const ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::Value >&
      values() const;

  // bool before = 2;
  void clear_before();
  static const int kBeforeFieldNumber = 2;
  bool before() const;
  void set_before(bool value);

  // @@protoc_insertion_point(class_scope:google.firestore.v1beta1.Cursor)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::Value > values_;
  bool before_;
  mutable int _cached_size_;
  friend struct ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::TableStruct;
  friend void ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsCursorImpl();
};
// ===================================================================


// ===================================================================

#ifdef __GNUC__
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif  // __GNUC__
// StructuredQuery_CollectionSelector

// string collection_id = 2;
inline void StructuredQuery_CollectionSelector::clear_collection_id() {
  collection_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline const ::std::string& StructuredQuery_CollectionSelector::collection_id() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.CollectionSelector.collection_id)
  return collection_id_.GetNoArena();
}
inline void StructuredQuery_CollectionSelector::set_collection_id(const ::std::string& value) {
  
  collection_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:google.firestore.v1beta1.StructuredQuery.CollectionSelector.collection_id)
}
#if LANG_CXX11
inline void StructuredQuery_CollectionSelector::set_collection_id(::std::string&& value) {
  
  collection_id_.SetNoArena(
    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
  // @@protoc_insertion_point(field_set_rvalue:google.firestore.v1beta1.StructuredQuery.CollectionSelector.collection_id)
}
#endif
inline void StructuredQuery_CollectionSelector::set_collection_id(const char* value) {
  GOOGLE_DCHECK(value != NULL);
  
  collection_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:google.firestore.v1beta1.StructuredQuery.CollectionSelector.collection_id)
}
inline void StructuredQuery_CollectionSelector::set_collection_id(const char* value, size_t size) {
  
  collection_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:google.firestore.v1beta1.StructuredQuery.CollectionSelector.collection_id)
}
inline ::std::string* StructuredQuery_CollectionSelector::mutable_collection_id() {
  
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.CollectionSelector.collection_id)
  return collection_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* StructuredQuery_CollectionSelector::release_collection_id() {
  // @@protoc_insertion_point(field_release:google.firestore.v1beta1.StructuredQuery.CollectionSelector.collection_id)
  
  return collection_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void StructuredQuery_CollectionSelector::set_allocated_collection_id(::std::string* collection_id) {
  if (collection_id != NULL) {
    
  } else {
    
  }
  collection_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), collection_id);
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1beta1.StructuredQuery.CollectionSelector.collection_id)
}

// bool all_descendants = 3;
inline void StructuredQuery_CollectionSelector::clear_all_descendants() {
  all_descendants_ = false;
}
inline bool StructuredQuery_CollectionSelector::all_descendants() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.CollectionSelector.all_descendants)
  return all_descendants_;
}
inline void StructuredQuery_CollectionSelector::set_all_descendants(bool value) {
  
  all_descendants_ = value;
  // @@protoc_insertion_point(field_set:google.firestore.v1beta1.StructuredQuery.CollectionSelector.all_descendants)
}

// -------------------------------------------------------------------

// StructuredQuery_Filter

// .google.firestore.v1beta1.StructuredQuery.CompositeFilter composite_filter = 1;
inline bool StructuredQuery_Filter::has_composite_filter() const {
  return filter_type_case() == kCompositeFilter;
}
inline void StructuredQuery_Filter::set_has_composite_filter() {
  _oneof_case_[0] = kCompositeFilter;
}
inline void StructuredQuery_Filter::clear_composite_filter() {
  if (has_composite_filter()) {
    delete filter_type_.composite_filter_;
    clear_has_filter_type();
  }
}
inline ::google::firestore::v1beta1::StructuredQuery_CompositeFilter* StructuredQuery_Filter::release_composite_filter() {
  // @@protoc_insertion_point(field_release:google.firestore.v1beta1.StructuredQuery.Filter.composite_filter)
  if (has_composite_filter()) {
    clear_has_filter_type();
      ::google::firestore::v1beta1::StructuredQuery_CompositeFilter* temp = filter_type_.composite_filter_;
    filter_type_.composite_filter_ = NULL;
    return temp;
  } else {
    return NULL;
  }
}
inline const ::google::firestore::v1beta1::StructuredQuery_CompositeFilter& StructuredQuery_Filter::composite_filter() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.Filter.composite_filter)
  return has_composite_filter()
      ? *filter_type_.composite_filter_
      : *reinterpret_cast< ::google::firestore::v1beta1::StructuredQuery_CompositeFilter*>(&::google::firestore::v1beta1::_StructuredQuery_CompositeFilter_default_instance_);
}
inline ::google::firestore::v1beta1::StructuredQuery_CompositeFilter* StructuredQuery_Filter::mutable_composite_filter() {
  if (!has_composite_filter()) {
    clear_filter_type();
    set_has_composite_filter();
    filter_type_.composite_filter_ = new ::google::firestore::v1beta1::StructuredQuery_CompositeFilter;
  }
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.Filter.composite_filter)
  return filter_type_.composite_filter_;
}

// .google.firestore.v1beta1.StructuredQuery.FieldFilter field_filter = 2;
inline bool StructuredQuery_Filter::has_field_filter() const {
  return filter_type_case() == kFieldFilter;
}
inline void StructuredQuery_Filter::set_has_field_filter() {
  _oneof_case_[0] = kFieldFilter;
}
inline void StructuredQuery_Filter::clear_field_filter() {
  if (has_field_filter()) {
    delete filter_type_.field_filter_;
    clear_has_filter_type();
  }
}
inline ::google::firestore::v1beta1::StructuredQuery_FieldFilter* StructuredQuery_Filter::release_field_filter() {
  // @@protoc_insertion_point(field_release:google.firestore.v1beta1.StructuredQuery.Filter.field_filter)
  if (has_field_filter()) {
    clear_has_filter_type();
      ::google::firestore::v1beta1::StructuredQuery_FieldFilter* temp = filter_type_.field_filter_;
    filter_type_.field_filter_ = NULL;
    return temp;
  } else {
    return NULL;
  }
}
inline const ::google::firestore::v1beta1::StructuredQuery_FieldFilter& StructuredQuery_Filter::field_filter() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.Filter.field_filter)
  return has_field_filter()
      ? *filter_type_.field_filter_
      : *reinterpret_cast< ::google::firestore::v1beta1::StructuredQuery_FieldFilter*>(&::google::firestore::v1beta1::_StructuredQuery_FieldFilter_default_instance_);
}
inline ::google::firestore::v1beta1::StructuredQuery_FieldFilter* StructuredQuery_Filter::mutable_field_filter() {
  if (!has_field_filter()) {
    clear_filter_type();
    set_has_field_filter();
    filter_type_.field_filter_ = new ::google::firestore::v1beta1::StructuredQuery_FieldFilter;
  }
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.Filter.field_filter)
  return filter_type_.field_filter_;
}

// .google.firestore.v1beta1.StructuredQuery.UnaryFilter unary_filter = 3;
inline bool StructuredQuery_Filter::has_unary_filter() const {
  return filter_type_case() == kUnaryFilter;
}
inline void StructuredQuery_Filter::set_has_unary_filter() {
  _oneof_case_[0] = kUnaryFilter;
}
inline void StructuredQuery_Filter::clear_unary_filter() {
  if (has_unary_filter()) {
    delete filter_type_.unary_filter_;
    clear_has_filter_type();
  }
}
inline ::google::firestore::v1beta1::StructuredQuery_UnaryFilter* StructuredQuery_Filter::release_unary_filter() {
  // @@protoc_insertion_point(field_release:google.firestore.v1beta1.StructuredQuery.Filter.unary_filter)
  if (has_unary_filter()) {
    clear_has_filter_type();
      ::google::firestore::v1beta1::StructuredQuery_UnaryFilter* temp = filter_type_.unary_filter_;
    filter_type_.unary_filter_ = NULL;
    return temp;
  } else {
    return NULL;
  }
}
inline const ::google::firestore::v1beta1::StructuredQuery_UnaryFilter& StructuredQuery_Filter::unary_filter() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.Filter.unary_filter)
  return has_unary_filter()
      ? *filter_type_.unary_filter_
      : *reinterpret_cast< ::google::firestore::v1beta1::StructuredQuery_UnaryFilter*>(&::google::firestore::v1beta1::_StructuredQuery_UnaryFilter_default_instance_);
}
inline ::google::firestore::v1beta1::StructuredQuery_UnaryFilter* StructuredQuery_Filter::mutable_unary_filter() {
  if (!has_unary_filter()) {
    clear_filter_type();
    set_has_unary_filter();
    filter_type_.unary_filter_ = new ::google::firestore::v1beta1::StructuredQuery_UnaryFilter;
  }
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.Filter.unary_filter)
  return filter_type_.unary_filter_;
}

inline bool StructuredQuery_Filter::has_filter_type() const {
  return filter_type_case() != FILTER_TYPE_NOT_SET;
}
inline void StructuredQuery_Filter::clear_has_filter_type() {
  _oneof_case_[0] = FILTER_TYPE_NOT_SET;
}
inline StructuredQuery_Filter::FilterTypeCase StructuredQuery_Filter::filter_type_case() const {
  return StructuredQuery_Filter::FilterTypeCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// StructuredQuery_CompositeFilter

// .google.firestore.v1beta1.StructuredQuery.CompositeFilter.Operator op = 1;
inline void StructuredQuery_CompositeFilter::clear_op() {
  op_ = 0;
}
inline ::google::firestore::v1beta1::StructuredQuery_CompositeFilter_Operator StructuredQuery_CompositeFilter::op() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.CompositeFilter.op)
  return static_cast< ::google::firestore::v1beta1::StructuredQuery_CompositeFilter_Operator >(op_);
}
inline void StructuredQuery_CompositeFilter::set_op(::google::firestore::v1beta1::StructuredQuery_CompositeFilter_Operator value) {
  
  op_ = value;
  // @@protoc_insertion_point(field_set:google.firestore.v1beta1.StructuredQuery.CompositeFilter.op)
}

// repeated .google.firestore.v1beta1.StructuredQuery.Filter filters = 2;
inline int StructuredQuery_CompositeFilter::filters_size() const {
  return filters_.size();
}
inline void StructuredQuery_CompositeFilter::clear_filters() {
  filters_.Clear();
}
inline const ::google::firestore::v1beta1::StructuredQuery_Filter& StructuredQuery_CompositeFilter::filters(int index) const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.CompositeFilter.filters)
  return filters_.Get(index);
}
inline ::google::firestore::v1beta1::StructuredQuery_Filter* StructuredQuery_CompositeFilter::mutable_filters(int index) {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.CompositeFilter.filters)
  return filters_.Mutable(index);
}
inline ::google::firestore::v1beta1::StructuredQuery_Filter* StructuredQuery_CompositeFilter::add_filters() {
  // @@protoc_insertion_point(field_add:google.firestore.v1beta1.StructuredQuery.CompositeFilter.filters)
  return filters_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_Filter >*
StructuredQuery_CompositeFilter::mutable_filters() {
  // @@protoc_insertion_point(field_mutable_list:google.firestore.v1beta1.StructuredQuery.CompositeFilter.filters)
  return &filters_;
}
inline const ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_Filter >&
StructuredQuery_CompositeFilter::filters() const {
  // @@protoc_insertion_point(field_list:google.firestore.v1beta1.StructuredQuery.CompositeFilter.filters)
  return filters_;
}

// -------------------------------------------------------------------

// StructuredQuery_FieldFilter

// .google.firestore.v1beta1.StructuredQuery.FieldReference field = 1;
inline bool StructuredQuery_FieldFilter::has_field() const {
  return this != internal_default_instance() && field_ != NULL;
}
inline void StructuredQuery_FieldFilter::clear_field() {
  if (GetArenaNoVirtual() == NULL && field_ != NULL) {
    delete field_;
  }
  field_ = NULL;
}
inline const ::google::firestore::v1beta1::StructuredQuery_FieldReference& StructuredQuery_FieldFilter::field() const {
  const ::google::firestore::v1beta1::StructuredQuery_FieldReference* p = field_;
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.FieldFilter.field)
  return p != NULL ? *p : *reinterpret_cast<const ::google::firestore::v1beta1::StructuredQuery_FieldReference*>(
      &::google::firestore::v1beta1::_StructuredQuery_FieldReference_default_instance_);
}
inline ::google::firestore::v1beta1::StructuredQuery_FieldReference* StructuredQuery_FieldFilter::release_field() {
  // @@protoc_insertion_point(field_release:google.firestore.v1beta1.StructuredQuery.FieldFilter.field)
  
  ::google::firestore::v1beta1::StructuredQuery_FieldReference* temp = field_;
  field_ = NULL;
  return temp;
}
inline ::google::firestore::v1beta1::StructuredQuery_FieldReference* StructuredQuery_FieldFilter::mutable_field() {
  
  if (field_ == NULL) {
    field_ = new ::google::firestore::v1beta1::StructuredQuery_FieldReference;
  }
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.FieldFilter.field)
  return field_;
}
inline void StructuredQuery_FieldFilter::set_allocated_field(::google::firestore::v1beta1::StructuredQuery_FieldReference* field) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == NULL) {
    delete field_;
  }
  if (field) {
    ::google::protobuf::Arena* submessage_arena = NULL;
    if (message_arena != submessage_arena) {
      field = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, field, submessage_arena);
    }
    
  } else {
    
  }
  field_ = field;
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1beta1.StructuredQuery.FieldFilter.field)
}

// .google.firestore.v1beta1.StructuredQuery.FieldFilter.Operator op = 2;
inline void StructuredQuery_FieldFilter::clear_op() {
  op_ = 0;
}
inline ::google::firestore::v1beta1::StructuredQuery_FieldFilter_Operator StructuredQuery_FieldFilter::op() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.FieldFilter.op)
  return static_cast< ::google::firestore::v1beta1::StructuredQuery_FieldFilter_Operator >(op_);
}
inline void StructuredQuery_FieldFilter::set_op(::google::firestore::v1beta1::StructuredQuery_FieldFilter_Operator value) {
  
  op_ = value;
  // @@protoc_insertion_point(field_set:google.firestore.v1beta1.StructuredQuery.FieldFilter.op)
}

// .google.firestore.v1beta1.Value value = 3;
inline bool StructuredQuery_FieldFilter::has_value() const {
  return this != internal_default_instance() && value_ != NULL;
}
inline const ::google::firestore::v1beta1::Value& StructuredQuery_FieldFilter::value() const {
  const ::google::firestore::v1beta1::Value* p = value_;
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.FieldFilter.value)
  return p != NULL ? *p : *reinterpret_cast<const ::google::firestore::v1beta1::Value*>(
      &::google::firestore::v1beta1::_Value_default_instance_);
}
inline ::google::firestore::v1beta1::Value* StructuredQuery_FieldFilter::release_value() {
  // @@protoc_insertion_point(field_release:google.firestore.v1beta1.StructuredQuery.FieldFilter.value)
  
  ::google::firestore::v1beta1::Value* temp = value_;
  value_ = NULL;
  return temp;
}
inline ::google::firestore::v1beta1::Value* StructuredQuery_FieldFilter::mutable_value() {
  
  if (value_ == NULL) {
    value_ = new ::google::firestore::v1beta1::Value;
  }
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.FieldFilter.value)
  return value_;
}
inline void StructuredQuery_FieldFilter::set_allocated_value(::google::firestore::v1beta1::Value* value) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == NULL) {
    delete reinterpret_cast< ::google::protobuf::MessageLite*>(value_);
  }
  if (value) {
    ::google::protobuf::Arena* submessage_arena = NULL;
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, value, submessage_arena);
    }
    
  } else {
    
  }
  value_ = value;
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1beta1.StructuredQuery.FieldFilter.value)
}

// -------------------------------------------------------------------

// StructuredQuery_UnaryFilter

// .google.firestore.v1beta1.StructuredQuery.UnaryFilter.Operator op = 1;
inline void StructuredQuery_UnaryFilter::clear_op() {
  op_ = 0;
}
inline ::google::firestore::v1beta1::StructuredQuery_UnaryFilter_Operator StructuredQuery_UnaryFilter::op() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.UnaryFilter.op)
  return static_cast< ::google::firestore::v1beta1::StructuredQuery_UnaryFilter_Operator >(op_);
}
inline void StructuredQuery_UnaryFilter::set_op(::google::firestore::v1beta1::StructuredQuery_UnaryFilter_Operator value) {
  
  op_ = value;
  // @@protoc_insertion_point(field_set:google.firestore.v1beta1.StructuredQuery.UnaryFilter.op)
}

// .google.firestore.v1beta1.StructuredQuery.FieldReference field = 2;
inline bool StructuredQuery_UnaryFilter::has_field() const {
  return operand_type_case() == kField;
}
inline void StructuredQuery_UnaryFilter::set_has_field() {
  _oneof_case_[0] = kField;
}
inline void StructuredQuery_UnaryFilter::clear_field() {
  if (has_field()) {
    delete operand_type_.field_;
    clear_has_operand_type();
  }
}
inline ::google::firestore::v1beta1::StructuredQuery_FieldReference* StructuredQuery_UnaryFilter::release_field() {
  // @@protoc_insertion_point(field_release:google.firestore.v1beta1.StructuredQuery.UnaryFilter.field)
  if (has_field()) {
    clear_has_operand_type();
      ::google::firestore::v1beta1::StructuredQuery_FieldReference* temp = operand_type_.field_;
    operand_type_.field_ = NULL;
    return temp;
  } else {
    return NULL;
  }
}
inline const ::google::firestore::v1beta1::StructuredQuery_FieldReference& StructuredQuery_UnaryFilter::field() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.UnaryFilter.field)
  return has_field()
      ? *operand_type_.field_
      : *reinterpret_cast< ::google::firestore::v1beta1::StructuredQuery_FieldReference*>(&::google::firestore::v1beta1::_StructuredQuery_FieldReference_default_instance_);
}
inline ::google::firestore::v1beta1::StructuredQuery_FieldReference* StructuredQuery_UnaryFilter::mutable_field() {
  if (!has_field()) {
    clear_operand_type();
    set_has_field();
    operand_type_.field_ = new ::google::firestore::v1beta1::StructuredQuery_FieldReference;
  }
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.UnaryFilter.field)
  return operand_type_.field_;
}

inline bool StructuredQuery_UnaryFilter::has_operand_type() const {
  return operand_type_case() != OPERAND_TYPE_NOT_SET;
}
inline void StructuredQuery_UnaryFilter::clear_has_operand_type() {
  _oneof_case_[0] = OPERAND_TYPE_NOT_SET;
}
inline StructuredQuery_UnaryFilter::OperandTypeCase StructuredQuery_UnaryFilter::operand_type_case() const {
  return StructuredQuery_UnaryFilter::OperandTypeCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// StructuredQuery_Order

// .google.firestore.v1beta1.StructuredQuery.FieldReference field = 1;
inline bool StructuredQuery_Order::has_field() const {
  return this != internal_default_instance() && field_ != NULL;
}
inline void StructuredQuery_Order::clear_field() {
  if (GetArenaNoVirtual() == NULL && field_ != NULL) {
    delete field_;
  }
  field_ = NULL;
}
inline const ::google::firestore::v1beta1::StructuredQuery_FieldReference& StructuredQuery_Order::field() const {
  const ::google::firestore::v1beta1::StructuredQuery_FieldReference* p = field_;
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.Order.field)
  return p != NULL ? *p : *reinterpret_cast<const ::google::firestore::v1beta1::StructuredQuery_FieldReference*>(
      &::google::firestore::v1beta1::_StructuredQuery_FieldReference_default_instance_);
}
inline ::google::firestore::v1beta1::StructuredQuery_FieldReference* StructuredQuery_Order::release_field() {
  // @@protoc_insertion_point(field_release:google.firestore.v1beta1.StructuredQuery.Order.field)
  
  ::google::firestore::v1beta1::StructuredQuery_FieldReference* temp = field_;
  field_ = NULL;
  return temp;
}
inline ::google::firestore::v1beta1::StructuredQuery_FieldReference* StructuredQuery_Order::mutable_field() {
  
  if (field_ == NULL) {
    field_ = new ::google::firestore::v1beta1::StructuredQuery_FieldReference;
  }
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.Order.field)
  return field_;
}
inline void StructuredQuery_Order::set_allocated_field(::google::firestore::v1beta1::StructuredQuery_FieldReference* field) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == NULL) {
    delete field_;
  }
  if (field) {
    ::google::protobuf::Arena* submessage_arena = NULL;
    if (message_arena != submessage_arena) {
      field = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, field, submessage_arena);
    }
    
  } else {
    
  }
  field_ = field;
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1beta1.StructuredQuery.Order.field)
}

// .google.firestore.v1beta1.StructuredQuery.Direction direction = 2;
inline void StructuredQuery_Order::clear_direction() {
  direction_ = 0;
}
inline ::google::firestore::v1beta1::StructuredQuery_Direction StructuredQuery_Order::direction() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.Order.direction)
  return static_cast< ::google::firestore::v1beta1::StructuredQuery_Direction >(direction_);
}
inline void StructuredQuery_Order::set_direction(::google::firestore::v1beta1::StructuredQuery_Direction value) {
  
  direction_ = value;
  // @@protoc_insertion_point(field_set:google.firestore.v1beta1.StructuredQuery.Order.direction)
}

// -------------------------------------------------------------------

// StructuredQuery_FieldReference

// string field_path = 2;
inline void StructuredQuery_FieldReference::clear_field_path() {
  field_path_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline const ::std::string& StructuredQuery_FieldReference::field_path() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.FieldReference.field_path)
  return field_path_.GetNoArena();
}
inline void StructuredQuery_FieldReference::set_field_path(const ::std::string& value) {
  
  field_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:google.firestore.v1beta1.StructuredQuery.FieldReference.field_path)
}
#if LANG_CXX11
inline void StructuredQuery_FieldReference::set_field_path(::std::string&& value) {
  
  field_path_.SetNoArena(
    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
  // @@protoc_insertion_point(field_set_rvalue:google.firestore.v1beta1.StructuredQuery.FieldReference.field_path)
}
#endif
inline void StructuredQuery_FieldReference::set_field_path(const char* value) {
  GOOGLE_DCHECK(value != NULL);
  
  field_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:google.firestore.v1beta1.StructuredQuery.FieldReference.field_path)
}
inline void StructuredQuery_FieldReference::set_field_path(const char* value, size_t size) {
  
  field_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:google.firestore.v1beta1.StructuredQuery.FieldReference.field_path)
}
inline ::std::string* StructuredQuery_FieldReference::mutable_field_path() {
  
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.FieldReference.field_path)
  return field_path_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline ::std::string* StructuredQuery_FieldReference::release_field_path() {
  // @@protoc_insertion_point(field_release:google.firestore.v1beta1.StructuredQuery.FieldReference.field_path)
  
  return field_path_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
inline void StructuredQuery_FieldReference::set_allocated_field_path(::std::string* field_path) {
  if (field_path != NULL) {
    
  } else {
    
  }
  field_path_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), field_path);
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1beta1.StructuredQuery.FieldReference.field_path)
}

// -------------------------------------------------------------------

// StructuredQuery_Projection

// repeated .google.firestore.v1beta1.StructuredQuery.FieldReference fields = 2;
inline int StructuredQuery_Projection::fields_size() const {
  return fields_.size();
}
inline void StructuredQuery_Projection::clear_fields() {
  fields_.Clear();
}
inline const ::google::firestore::v1beta1::StructuredQuery_FieldReference& StructuredQuery_Projection::fields(int index) const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.Projection.fields)
  return fields_.Get(index);
}
inline ::google::firestore::v1beta1::StructuredQuery_FieldReference* StructuredQuery_Projection::mutable_fields(int index) {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.Projection.fields)
  return fields_.Mutable(index);
}
inline ::google::firestore::v1beta1::StructuredQuery_FieldReference* StructuredQuery_Projection::add_fields() {
  // @@protoc_insertion_point(field_add:google.firestore.v1beta1.StructuredQuery.Projection.fields)
  return fields_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_FieldReference >*
StructuredQuery_Projection::mutable_fields() {
  // @@protoc_insertion_point(field_mutable_list:google.firestore.v1beta1.StructuredQuery.Projection.fields)
  return &fields_;
}
inline const ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_FieldReference >&
StructuredQuery_Projection::fields() const {
  // @@protoc_insertion_point(field_list:google.firestore.v1beta1.StructuredQuery.Projection.fields)
  return fields_;
}

// -------------------------------------------------------------------

// StructuredQuery

// .google.firestore.v1beta1.StructuredQuery.Projection select = 1;
inline bool StructuredQuery::has_select() const {
  return this != internal_default_instance() && select_ != NULL;
}
inline void StructuredQuery::clear_select() {
  if (GetArenaNoVirtual() == NULL && select_ != NULL) {
    delete select_;
  }
  select_ = NULL;
}
inline const ::google::firestore::v1beta1::StructuredQuery_Projection& StructuredQuery::select() const {
  const ::google::firestore::v1beta1::StructuredQuery_Projection* p = select_;
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.select)
  return p != NULL ? *p : *reinterpret_cast<const ::google::firestore::v1beta1::StructuredQuery_Projection*>(
      &::google::firestore::v1beta1::_StructuredQuery_Projection_default_instance_);
}
inline ::google::firestore::v1beta1::StructuredQuery_Projection* StructuredQuery::release_select() {
  // @@protoc_insertion_point(field_release:google.firestore.v1beta1.StructuredQuery.select)
  
  ::google::firestore::v1beta1::StructuredQuery_Projection* temp = select_;
  select_ = NULL;
  return temp;
}
inline ::google::firestore::v1beta1::StructuredQuery_Projection* StructuredQuery::mutable_select() {
  
  if (select_ == NULL) {
    select_ = new ::google::firestore::v1beta1::StructuredQuery_Projection;
  }
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.select)
  return select_;
}
inline void StructuredQuery::set_allocated_select(::google::firestore::v1beta1::StructuredQuery_Projection* select) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == NULL) {
    delete select_;
  }
  if (select) {
    ::google::protobuf::Arena* submessage_arena = NULL;
    if (message_arena != submessage_arena) {
      select = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, select, submessage_arena);
    }
    
  } else {
    
  }
  select_ = select;
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1beta1.StructuredQuery.select)
}

// repeated .google.firestore.v1beta1.StructuredQuery.CollectionSelector from = 2;
inline int StructuredQuery::from_size() const {
  return from_.size();
}
inline void StructuredQuery::clear_from() {
  from_.Clear();
}
inline const ::google::firestore::v1beta1::StructuredQuery_CollectionSelector& StructuredQuery::from(int index) const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.from)
  return from_.Get(index);
}
inline ::google::firestore::v1beta1::StructuredQuery_CollectionSelector* StructuredQuery::mutable_from(int index) {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.from)
  return from_.Mutable(index);
}
inline ::google::firestore::v1beta1::StructuredQuery_CollectionSelector* StructuredQuery::add_from() {
  // @@protoc_insertion_point(field_add:google.firestore.v1beta1.StructuredQuery.from)
  return from_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_CollectionSelector >*
StructuredQuery::mutable_from() {
  // @@protoc_insertion_point(field_mutable_list:google.firestore.v1beta1.StructuredQuery.from)
  return &from_;
}
inline const ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_CollectionSelector >&
StructuredQuery::from() const {
  // @@protoc_insertion_point(field_list:google.firestore.v1beta1.StructuredQuery.from)
  return from_;
}

// .google.firestore.v1beta1.StructuredQuery.Filter where = 3;
inline bool StructuredQuery::has_where() const {
  return this != internal_default_instance() && where_ != NULL;
}
inline void StructuredQuery::clear_where() {
  if (GetArenaNoVirtual() == NULL && where_ != NULL) {
    delete where_;
  }
  where_ = NULL;
}
inline const ::google::firestore::v1beta1::StructuredQuery_Filter& StructuredQuery::where() const {
  const ::google::firestore::v1beta1::StructuredQuery_Filter* p = where_;
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.where)
  return p != NULL ? *p : *reinterpret_cast<const ::google::firestore::v1beta1::StructuredQuery_Filter*>(
      &::google::firestore::v1beta1::_StructuredQuery_Filter_default_instance_);
}
inline ::google::firestore::v1beta1::StructuredQuery_Filter* StructuredQuery::release_where() {
  // @@protoc_insertion_point(field_release:google.firestore.v1beta1.StructuredQuery.where)
  
  ::google::firestore::v1beta1::StructuredQuery_Filter* temp = where_;
  where_ = NULL;
  return temp;
}
inline ::google::firestore::v1beta1::StructuredQuery_Filter* StructuredQuery::mutable_where() {
  
  if (where_ == NULL) {
    where_ = new ::google::firestore::v1beta1::StructuredQuery_Filter;
  }
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.where)
  return where_;
}
inline void StructuredQuery::set_allocated_where(::google::firestore::v1beta1::StructuredQuery_Filter* where) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == NULL) {
    delete where_;
  }
  if (where) {
    ::google::protobuf::Arena* submessage_arena = NULL;
    if (message_arena != submessage_arena) {
      where = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, where, submessage_arena);
    }
    
  } else {
    
  }
  where_ = where;
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1beta1.StructuredQuery.where)
}

// repeated .google.firestore.v1beta1.StructuredQuery.Order order_by = 4;
inline int StructuredQuery::order_by_size() const {
  return order_by_.size();
}
inline void StructuredQuery::clear_order_by() {
  order_by_.Clear();
}
inline const ::google::firestore::v1beta1::StructuredQuery_Order& StructuredQuery::order_by(int index) const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.order_by)
  return order_by_.Get(index);
}
inline ::google::firestore::v1beta1::StructuredQuery_Order* StructuredQuery::mutable_order_by(int index) {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.order_by)
  return order_by_.Mutable(index);
}
inline ::google::firestore::v1beta1::StructuredQuery_Order* StructuredQuery::add_order_by() {
  // @@protoc_insertion_point(field_add:google.firestore.v1beta1.StructuredQuery.order_by)
  return order_by_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_Order >*
StructuredQuery::mutable_order_by() {
  // @@protoc_insertion_point(field_mutable_list:google.firestore.v1beta1.StructuredQuery.order_by)
  return &order_by_;
}
inline const ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::StructuredQuery_Order >&
StructuredQuery::order_by() const {
  // @@protoc_insertion_point(field_list:google.firestore.v1beta1.StructuredQuery.order_by)
  return order_by_;
}

// .google.firestore.v1beta1.Cursor start_at = 7;
inline bool StructuredQuery::has_start_at() const {
  return this != internal_default_instance() && start_at_ != NULL;
}
inline void StructuredQuery::clear_start_at() {
  if (GetArenaNoVirtual() == NULL && start_at_ != NULL) {
    delete start_at_;
  }
  start_at_ = NULL;
}
inline const ::google::firestore::v1beta1::Cursor& StructuredQuery::start_at() const {
  const ::google::firestore::v1beta1::Cursor* p = start_at_;
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.start_at)
  return p != NULL ? *p : *reinterpret_cast<const ::google::firestore::v1beta1::Cursor*>(
      &::google::firestore::v1beta1::_Cursor_default_instance_);
}
inline ::google::firestore::v1beta1::Cursor* StructuredQuery::release_start_at() {
  // @@protoc_insertion_point(field_release:google.firestore.v1beta1.StructuredQuery.start_at)
  
  ::google::firestore::v1beta1::Cursor* temp = start_at_;
  start_at_ = NULL;
  return temp;
}
inline ::google::firestore::v1beta1::Cursor* StructuredQuery::mutable_start_at() {
  
  if (start_at_ == NULL) {
    start_at_ = new ::google::firestore::v1beta1::Cursor;
  }
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.start_at)
  return start_at_;
}
inline void StructuredQuery::set_allocated_start_at(::google::firestore::v1beta1::Cursor* start_at) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == NULL) {
    delete start_at_;
  }
  if (start_at) {
    ::google::protobuf::Arena* submessage_arena = NULL;
    if (message_arena != submessage_arena) {
      start_at = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, start_at, submessage_arena);
    }
    
  } else {
    
  }
  start_at_ = start_at;
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1beta1.StructuredQuery.start_at)
}

// .google.firestore.v1beta1.Cursor end_at = 8;
inline bool StructuredQuery::has_end_at() const {
  return this != internal_default_instance() && end_at_ != NULL;
}
inline void StructuredQuery::clear_end_at() {
  if (GetArenaNoVirtual() == NULL && end_at_ != NULL) {
    delete end_at_;
  }
  end_at_ = NULL;
}
inline const ::google::firestore::v1beta1::Cursor& StructuredQuery::end_at() const {
  const ::google::firestore::v1beta1::Cursor* p = end_at_;
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.end_at)
  return p != NULL ? *p : *reinterpret_cast<const ::google::firestore::v1beta1::Cursor*>(
      &::google::firestore::v1beta1::_Cursor_default_instance_);
}
inline ::google::firestore::v1beta1::Cursor* StructuredQuery::release_end_at() {
  // @@protoc_insertion_point(field_release:google.firestore.v1beta1.StructuredQuery.end_at)
  
  ::google::firestore::v1beta1::Cursor* temp = end_at_;
  end_at_ = NULL;
  return temp;
}
inline ::google::firestore::v1beta1::Cursor* StructuredQuery::mutable_end_at() {
  
  if (end_at_ == NULL) {
    end_at_ = new ::google::firestore::v1beta1::Cursor;
  }
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.end_at)
  return end_at_;
}
inline void StructuredQuery::set_allocated_end_at(::google::firestore::v1beta1::Cursor* end_at) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == NULL) {
    delete end_at_;
  }
  if (end_at) {
    ::google::protobuf::Arena* submessage_arena = NULL;
    if (message_arena != submessage_arena) {
      end_at = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, end_at, submessage_arena);
    }
    
  } else {
    
  }
  end_at_ = end_at;
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1beta1.StructuredQuery.end_at)
}

// int32 offset = 6;
inline void StructuredQuery::clear_offset() {
  offset_ = 0;
}
inline ::google::protobuf::int32 StructuredQuery::offset() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.offset)
  return offset_;
}
inline void StructuredQuery::set_offset(::google::protobuf::int32 value) {
  
  offset_ = value;
  // @@protoc_insertion_point(field_set:google.firestore.v1beta1.StructuredQuery.offset)
}

// .google.protobuf.Int32Value limit = 5;
inline bool StructuredQuery::has_limit() const {
  return this != internal_default_instance() && limit_ != NULL;
}
inline const ::google::protobuf::Int32Value& StructuredQuery::limit() const {
  const ::google::protobuf::Int32Value* p = limit_;
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.StructuredQuery.limit)
  return p != NULL ? *p : *reinterpret_cast<const ::google::protobuf::Int32Value*>(
      &::google::protobuf::_Int32Value_default_instance_);
}
inline ::google::protobuf::Int32Value* StructuredQuery::release_limit() {
  // @@protoc_insertion_point(field_release:google.firestore.v1beta1.StructuredQuery.limit)
  
  ::google::protobuf::Int32Value* temp = limit_;
  limit_ = NULL;
  return temp;
}
inline ::google::protobuf::Int32Value* StructuredQuery::mutable_limit() {
  
  if (limit_ == NULL) {
    limit_ = new ::google::protobuf::Int32Value;
  }
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.StructuredQuery.limit)
  return limit_;
}
inline void StructuredQuery::set_allocated_limit(::google::protobuf::Int32Value* limit) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == NULL) {
    delete reinterpret_cast< ::google::protobuf::MessageLite*>(limit_);
  }
  if (limit) {
    ::google::protobuf::Arena* submessage_arena =
      reinterpret_cast< ::google::protobuf::MessageLite*>(limit)->GetArena();
    if (message_arena != submessage_arena) {
      limit = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, limit, submessage_arena);
    }
    
  } else {
    
  }
  limit_ = limit;
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1beta1.StructuredQuery.limit)
}

// -------------------------------------------------------------------

// Cursor

// repeated .google.firestore.v1beta1.Value values = 1;
inline int Cursor::values_size() const {
  return values_.size();
}
inline const ::google::firestore::v1beta1::Value& Cursor::values(int index) const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.Cursor.values)
  return values_.Get(index);
}
inline ::google::firestore::v1beta1::Value* Cursor::mutable_values(int index) {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1beta1.Cursor.values)
  return values_.Mutable(index);
}
inline ::google::firestore::v1beta1::Value* Cursor::add_values() {
  // @@protoc_insertion_point(field_add:google.firestore.v1beta1.Cursor.values)
  return values_.Add();
}
inline ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::Value >*
Cursor::mutable_values() {
  // @@protoc_insertion_point(field_mutable_list:google.firestore.v1beta1.Cursor.values)
  return &values_;
}
inline const ::google::protobuf::RepeatedPtrField< ::google::firestore::v1beta1::Value >&
Cursor::values() const {
  // @@protoc_insertion_point(field_list:google.firestore.v1beta1.Cursor.values)
  return values_;
}

// bool before = 2;
inline void Cursor::clear_before() {
  before_ = false;
}
inline bool Cursor::before() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1beta1.Cursor.before)
  return before_;
}
inline void Cursor::set_before(bool value) {
  
  before_ = value;
  // @@protoc_insertion_point(field_set:google.firestore.v1beta1.Cursor.before)
}

#ifdef __GNUC__
  #pragma GCC diagnostic pop
#endif  // __GNUC__
// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------


// @@protoc_insertion_point(namespace_scope)

}  // namespace v1beta1
}  // namespace firestore
}  // namespace google

namespace google {
namespace protobuf {

template <> struct is_proto_enum< ::google::firestore::v1beta1::StructuredQuery_CompositeFilter_Operator> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::google::firestore::v1beta1::StructuredQuery_CompositeFilter_Operator>() {
  return ::google::firestore::v1beta1::StructuredQuery_CompositeFilter_Operator_descriptor();
}
template <> struct is_proto_enum< ::google::firestore::v1beta1::StructuredQuery_FieldFilter_Operator> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::google::firestore::v1beta1::StructuredQuery_FieldFilter_Operator>() {
  return ::google::firestore::v1beta1::StructuredQuery_FieldFilter_Operator_descriptor();
}
template <> struct is_proto_enum< ::google::firestore::v1beta1::StructuredQuery_UnaryFilter_Operator> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::google::firestore::v1beta1::StructuredQuery_UnaryFilter_Operator>() {
  return ::google::firestore::v1beta1::StructuredQuery_UnaryFilter_Operator_descriptor();
}
template <> struct is_proto_enum< ::google::firestore::v1beta1::StructuredQuery_Direction> : ::google::protobuf::internal::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::google::firestore::v1beta1::StructuredQuery_Direction>() {
  return ::google::firestore::v1beta1::StructuredQuery_Direction_descriptor();
}

}  // namespace protobuf
}  // namespace google

// @@protoc_insertion_point(global_scope)

#endif  // PROTOBUF_google_2ffirestore_2fv1beta1_2fquery_2eproto__INCLUDED
